home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / MSD-DU10.ARC / MSD - PART 05 < prev    next >
Encoding:
Text File  |  2019-04-13  |  4.7 KB  |  78 lines

  1. ║CM:MSD - PART 05
  2. ║LM21:RM70:PP66:PG60
  3. ║P#9
  4. ║FT1:,,╨AGE <>
  5. ║AI-16
  6.        ╧╨╘╙├╚   ╧PTIMAL SEARCH PATTERN
  7.  
  8. $├2┼0           ├LEAR ╘0 [$48] AND ─╥╓╞╠╟ [$4├─┼].
  9. $├2┼7...$├309   ╘HIS CODE SEGMENT IS A COMPLICATED ALGORITHM FOR SCANNING THE DRIVES REQUESTED BY UP TO 4 FILE NAMES (IE ╞╔╠─╥╓...╞╔╠─╥╓+3 [$4├6├...] AND GENERATING A FLAG BYTE.  ┬IT 0 INDICATES IF ONE OR BOTH DRIVES NEED TO BE SEARCHED AND BITS 6-7 INDICATE THE DRIVE TO BE SEARCHED IF ONLY ONE DRIVE NUMBER IS ENTERED.
  10. $├30┴           ╙AVE FLAG BYTE ON THE STACK.
  11. $├30┬           ═ASK OFF BITS 2-7 AND SAVE RESULT (INDICATES # OF DRIVES TO BE SEARCHED, 0=>1 DRIVE, 1=>BOTH DRIVES) IN ─╥╓├╬╘ [$4├──].
  12. $├310           ╥ESTORE FLAG BYTE FROM THE STACK AND PERFORM A LEFT SHIFT TO PUT BIT 7 IN THE .├ FLAG AND BIT 6 IN THE .╬ FLAG.
  13. $├312           ╔F THE .╬ FLAG IS CLEAR THEN BRANCH TO ╧╙75 TO DETERMINE ON WHAT DRIVE THE SEARCH IS TO START.
  14. $├314           ╘HE .╬ FLAG WAS SET WHICH MEANS THE DRIVE WAS EXPLICITLY SPECIFIED IN EACH FILE SPECIFICATION (EG 1:╪, 0:┴┬├, 0:╘┼╙╘).  ╔N THIS CASE, OBTAIN THE DRIVE # FOR THE FIRST FILE ╞╔╠─╥╓ [$4├6├].
  15. $├317  ╧╙35     ┴╬─ VALUE WITH $01, AND SAVE THE RESULT IN      ─╥╓╬╒═ [$54] THE FIRST DRIVE TO BE SEARCHED.
  16. $├31┬           ├HECK ─╥╓├╬╘ [$4├──] AND IF ZERO THEN BRANCH TO ╧╙60 TO SEARCH ONLY ONE DRIVE.
  17. $├320           ╩╙╥ ┴╒╘╧╔ [$├54╞] TO CHECK THE DRIVE FOR A DISKETTE AND INITIALIZE IF NECESSARY.
  18. $├323           ╔F THE .┌ FLAG IS SET UPON RETURN THEN EVERYTHING WORKED SO BRANCH TO ╧╙50.
  19. $├325           ┼VEN THOUGH THIS DRIVE FAILED, WE ARE STILL O.K. IF THIS IS A 2 DRIVE SEARCH.  ╩╙╥ ╘╧╟─╥╓ [$├2┴9] TO TOGGLE THE DRIVE NUMBER.
  20. $├328           ╙ET ─╥╓├╬╘ [$4├──] TO ZERO TO INDICATE A SINGLE DRIVE SEARCH.
  21. $├32─           ╩╙╥ ┴╒╘╧╔ [$├54╞] AND BRANCH TO ╧╙70 IF THIS DRIVE WAS O.K.
  22. $├332  ╧╙45     ╙ET .┴ TO $74 (─╥╔╓┼ ╬╧╘ ╥┼┴─┘).
  23. $├334           ╩╙╥ ├═─┼╥╥ [$├0╞─] TO GENERATE THE ERROR MESSAGE.
  24. $├337  ╧╙50     ╩╙╥ ╘╧╟─╥╓ [$├2┴9] TO TOGGLE DRIVE # BACK TO THE ORIGINAL.
  25. $├33┴           ╩╙╥ ┴╒╘╧╔ [$├54╞] TO INITIALIZE THE DRIVE.
  26. $├33─           ╙AVE PROCESSOR STATUS (IE THE .┌ FLAG) ON THE STACK.
  27. $├33┼           ╩╙╥ ╘╧╟─╥╓ [$├2┴9] TO SWITCH DRIVES.
  28. $├341           ╥ESTORE THE PROCESSOR STATUS AND IF .┌ IS SET THEN ALL IS WELL SO BRANCH TO ╧╙70.
  29. $├344           ╙ET ─╥╓├╬╘ [$4├──] TO ZERO AND BRANCH TO ╧╙70.
  30. $├34┬  ╧╙60     ╩╙╥ ┴╒╘╧╔ [$├54╞] AND IF IT FAILED, BRANCH TO ╧╙45.
  31. $├350  ╧╙70     ╩UMP TO ╙┼╘╠┼─ [$├003] TO TURN ON DRIVE ╠┼─.
  32. $├353  ╧╙75     ╨UT .├ FLAG IN BIT 0 OF .┴ (THIS IS THE 1'ST DRIVE TO BE TRIED).
  33. $├354           ╩UMP TO ╧╙35 TO CHECK FOR DRIVE READY.
  34. ║FP
  35.        ╙├╚╘┬╠   ╙EARCH ╞LAG ╘ABLE
  36.  
  37.        ╬OTE:    ╧NLY FIRST 7 ENTRIES SEEM TO BE USED.
  38.  
  39. ╘HE MEANING OF THE BITS IN EACH TABLE ENTRY IS AS FOLLOWS:
  40.  
  41.        ┬IT 7    - ─RIVE # ON WHICH TO START SEARCH.
  42.        ┬IT 6    - ┴ VALUE OF %1 MEANS THE DRIVE NUMBER WAS CODED AT THE START OF EACH FILE NAME AND THERE WAS A MIXTURE OF BOTH DRIVE NUMBERS.
  43.        ┬ITS 5-1 - ╬OT USED.
  44.        ┬IT 0    - # OF DRIVES (%0=>ONLY 1, %1=>BOTH).
  45.  
  46. $├357           $00 $80 $41 $01 $01 $01 $01
  47. $├35┼           $81 $81 $81 $81 $42 $42 $42 $42
  48.  
  49.  
  50.  
  51.        ╠╧╧╦╒╨   ╠OOK UP ALL FILES AND GET DIRECTORY INFORMATION
  52.  
  53. $├366           ╩╙╥ ╧╨╘╙├╚ [$├2┼0] TO SET OPTIMAL DISK SEARCH.
  54. $├369  ╠╦05     ├LEAR ─┼╠╔╬─ [$┴╞] TO INDICATE WE ARE ╬╧╘ LOOKING FOR A DELETED/UNUSED ENTRY.
  55. $├36─           ╩╙╥ ╙╥├╚╙╘ [$├4┬┼] TO START THE DIRECTORY SEARCH.
  56. $├370           ╧N RETURN, BRANCH TO ╠╦25 IF A VALID FILE WAS FOUND.
  57. $├372  ╠╦10     ─ECREMENT ─╥╓├╬╘ [$4├──] TO SEE IF ANOTHER DRIVE CAN BE SEARCHED.  ╔F SO THEN BRANCH TO ╠╦15.
  58. $├377           ╬O MORE DRIVES TO SEARCH SO EXIT.
  59. $├378  ╠╦15     ╩╙╥ ╙╫╔╘├╚ [$├3──] TO SWITCH TO THE OTHER DRIVE.
  60. $├37┬           ┬RANCH TO ╠╦05 TO CONTINUE SEARCH ON OTHER DRIVE.
  61. $├37─  ╠╦20     ╩╙╥ ╙┼┴╥├╚ [$├529] TO GET THE NEXT VALID FILE NAME IN THE DIRECTORY.
  62. $├380           ╔F A VALID FILE NAME WAS NOT FOUND THEN BRANCH TO ╠╦30.
  63. $├382  ╠╦25     ╩╙╥ ├╧═╨┴╥ [$├3┼┴] TO SEE IF THE ENTRY MATCHES A FILE NAME.
  64. $├385           ╔F ╞╧╒╬─ [$4├┼0] = 0 (ALL FILES ╬╧╘ FOUND) THEN BRANCH TO ╠╦26.
  65. $├38┴           ┴LL FILES HAVE BEEN FOUND SO RETURN.
  66. $├38┬  ╠╦26     ╔F ┼╬╘╞╬─ [$4├┬5] < 0 (MEANS ENTRY DID NOT MATCH A FILE NAME) THEN BRANCH BACK TO ╠╦20 TO GET THE NEXT DIRECTORY ENTRY AND TRY AGAIN.
  67. $├390           ╔F ┼╬╘╞╬─ [$4├┬5] >= 0 (MEANS ENTRY DID MATCH A FILE NAME) THEN BRANCH BACK TO ╠╦25 TO SEE IF THE SAME ENTRY MATCHES ANOTHER FILE NAME.
  68. $├392  ╠╦30     ╔F ╞╧╒╬─ [$4├┼0] = 0 (ALL FILES ╬╧╘ FOUND) THEN BRANCH BACK TO ╠╦10 TO SEE IF ANOTHER DRIVE IS AVAILABLE.
  69. $├397           ┴LL FILES HAVE BEEN FOUND SO RETURN.
  70.  
  71.  
  72.  
  73.        ╞╞╥┼     ╞IND NEXT DIRECTORY ENTRY MATCHING ANY FILE NAME
  74.  
  75. $├398           ╩╙╥ ╙╙╥┼ [$├516] TO GET THE NEXT DIRECTORY BLOCK.
  76. $├39┬           ╔F NO MORE BLOCKS AVAILABLE THEN BRANCH TO ╞╞10.
  77. $├39─           ╔F BLOCK FOUND THEN BRANCH TO ╞╞25.
  78.